﻿using System;

namespace SmlEngine
{
    /// <summary>
    /// Defines actions for interacting with collections.
    /// </summary>
    public enum CollectionAction
    {
        Add,
        Remove
    }

    /// <summary>
    /// Scrolling (for camera?) type.
    /// </summary>
    public enum ScrollType
    {
        Linear,
        Quadratic
    }

    /// <summary>
    /// Defines graphics flipping states.
    /// </summary>
    public enum Flip
    {
        None,
        Horizontally,
        Vertically
    }

    /// <summary>
    /// Defines text alignment types.
    /// </summary>
    public enum AlignmentMode
    {
        Left,
        Center,
        Right
    }

    /// <summary>
    /// Defines directions.
    /// </summary>
    public enum Direction
    {
        Left,
        Right,
        Top,
        Bottom
    }

    /// <summary>
    /// Defines coordinate axes.
    /// </summary>
    [Flags]
    public enum Axis
    {
        None,
        Horizontal,
        Vertical,
        Both = Horizontal | Vertical
    }

    /// <summary>
    /// Defines directions.
    /// </summary>
    [Flags]
    public enum Directions
    {
        None,
        Left,
        Right,
        Top,
        Bottom
    }

    /// <summary>
    /// Defines slope directions.
    /// </summary>
    public enum SlopeDirection
    {
        None,
        TopLeft,
        TopRight,
        BottomLeft,
        BottomRight
    }

    /// <summary>
    /// Defines corner directions.
    /// </summary>
    public enum CornerDirection
    {
        TopLeft,
        TopRight,
        BottomLeft,
        BottomRight
    }

    /// <summary>
    /// Defines directions that sprites face.
    /// </summary>
    public enum FaceDirection
    {
        Left = -1,
        Right = 1
    }

    /// <summary>
    /// Defines grid directions.
    /// </summary>
    public enum GridDirection
    {
        Left,
        Right,
        Top,
        Bottom,
        TopLeft,
        TopRight,
        BottomLeft,
        BottomRight
    }

    /// <summary>
    /// Defines grid directions.
    /// </summary>
    [Flags]
    public enum GridDirections
    {
        Left,
        Right,
        Top,
        Bottom,
        TopLeft,
        TopRight,
        BottomLeft,
        BottomRight
    }

    /// <summary>
    /// Poses for the WorldPlayer.
    /// </summary>
    public enum WorldPlayerPoses
    {
        /// <summary>
        /// Uses one pose.
        /// </summary>
        OnePose,
        /// <summary>
        /// Uses one pose for each direction.
        /// </summary>
        FourPoses
    }

    /// <summary>
    /// Defines path types.
    /// </summary>
    public enum PathType
    {
        Default,
        Horizontal,
        Vertical,
        CornerTopLeft,
        CornerTopRight,
        CornerBottomLeft,
        CornerBottomRight,
        TIntersectionFromLeft,
        TIntersectionFromRight,
        TIntersectionFromTop,
        TIntersectionFromBottom,
        FourWayIntersection
    }

    /// <summary>
    /// Defines a state of a path tile.
    /// </summary>
    public enum PathState
    {
        Standard,
        Node,
        NoTile
    }

    /// <summary>
    /// Defines how the resource (world, level) files are accessed.
    /// </summary>
    public enum ResourceState
    {
        Default,
        /// <summary>
        /// A standalone level (for example, opened from a file dialog).
        /// </summary>
        LevelStandalone,
        /// <summary>
        /// A standalone world that has levels (for exmaple, opened from a file dialog).
        /// </summary>
        WorldStandalone,
        /// <summary>
        /// A project file that groups world and levels.
        /// </summary>
        Project
    }
}
